package com.git.hui.yinshua.biz.order.dao.mapper;

import com.git.hui.yinshua.biz.order.dao.entity.PtOrderEntity;
import com.git.hui.yinshua.biz.order.dao.entity.PtOrderItemEntity;
import com.git.hui.yinshua.biz.rest.models.order.req.PtOrderQueryReq;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 拼团单
 *
 * @author YiHui
 * @date 2024/7/2
 */
public interface PtOrderMapper {
    /**
     * 保存订单
     *
     * @param order
     * @return
     */
    Integer savePtOrder(@Param("order") PtOrderEntity order);

    /**
     * 保存订单明细
     *
     * @param orderItemList
     * @return
     */
    Integer savePtOrderItems(@Param("item") PtOrderItemEntity orderItemList);


    /**
     * 当订单状态变为 已支付/取消时，更新为拼团中or支付超时取消
     *
     * @param orderId 用户订单
     * @param status  状态 -> 10, 99
     * @return
     */
    Integer updatePtItemPayStatus(@Param("orderId") Long orderId, @Param("status") Integer status);

    Integer updatePtOrderPayStatus(@Param("ptId") Integer ptId, @Param("status") Integer status);

    /**
     * 根据拼团单成功or失败，更新相应的详情为成功/失败
     *
     * @param ptId   拼团单
     * @param status 状态 20, 100
     * @return
     */
    Integer updatePtSucceedStatus(@Param("ptId") Integer ptId, @Param("status") Integer status);


    /**
     * 用于参团时加锁，避免人数超过限制
     *
     * @param ptOrderId
     * @return
     */
    PtOrderEntity selectPtOrderAndLock(@Param("id") Integer ptOrderId);

    /**
     * 查询拼团订单
     *
     * @param ptOrderId 拼团订单id
     * @return
     */
    PtOrderEntity selectPtOrder(@Param("id") Integer ptOrderId);

    /**
     * 通过订单id，查询拼团单id
     *
     * @param orderId 订单id
     * @return
     */
    Integer queryPtOrderIdByOrderId(@Param("orderId") Long orderId);

    /**
     * 查询拼团单
     *
     * @return
     */
    List<PtOrderEntity> listOrder(PtOrderQueryReq req);

    /**
     * 查询超时失败的拼团单; 因为整体的数据量不多，这里不加分页，每次处理100条
     *
     * @return
     */
    List<Integer> queryOverTimeFailedOrders();

    /**
     * 查询拼团对应的订单
     *
     * @param code
     * @return
     */
    List<PtOrderItemEntity> listPtOrderItemsByCode(String code);
}
